package org.totoro.memory.oom;

/**
 * 该错误表示所有可用的虚拟内存已被耗尽。虚拟内存（Virtual Memory）由物理内存（Physical Memory）和交
 * 换空间（Swap Space）两部分组成。当运行时程序请求的虚拟内存溢出时就会报 Outof swap space? 错误。
 * <p>
 * 原因分析
 * 该错误出现的常见原因包括以下几类：
 * <p>
 * 1、地址空间不足；
 * 2、物理内存已耗光；
 * 3、应用程序的本地内存泄漏（native leak），例如不断申请本地内存，却不释放。
 * 4、执行 jmap-histo:live<pid> 命令，强制执行 Full GC；如果几次执行后内存明显下降，则基本确认为 Direct ByteBuffer 问题。
 * <p>
 * 解决方案
 * 根据错误原因可以采取如下解决方案：
 * <p>
 * 1、升级地址空间为 64 bit；
 * 2、使用 Arthas 检查是否为 Inflater/Deflater 解压缩问题，如果是，则显式调用 end 方法。
 * 3、Direct ByteBuffer 问题可以通过启动参数 -XX:MaxDirectMemorySize 调低阈值。
 * 4、升级服务器配置/隔离部署，避免争用。
 *
 * @author daocr
 * @date 2020/3/2
 */
public class OutOfSwapSpace {
}
